package com.base.kotlin


import android.content.Intent
import android.os.Bundle
import android.util.Log
import android.widget.Button
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
import com.base.common.constant.SimplePage
import com.base.common.utils.PageHelper
import com.drake.net.Get
import com.drake.net.Net
import com.drake.net.interfaces.NetErrorHandler
import com.drake.net.interfaces.ProgressListener
import com.drake.net.scope.NetCoroutineScope
import com.drake.net.utils.scope
import com.drake.net.utils.scopeNetLife
import com.kotlin.base.utils.PropertiesUtil
import com.tao.data.Resource
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.*
import kotlinx.coroutines.flow.*
import javax.inject.Inject


@AndroidEntryPoint
class MainActivity : AppCompatActivity() {

     val viewModel:MainViewModel by viewModels()
    fun log(msg: String) = println("[${Thread.currentThread().name}] $msg")


    fun go(){
        val intent :Intent=Intent(this,MainActivity2::class.java)

        startActivity(intent)


    }
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
//
        // <uses-permission android:name="android.permission.READ_CALL_LOG" />
        //    <uses-permission android:name="android.permission.RECORD_AUDIO" />
        //    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
        //    <uses-permission android:name="android.permission.INTERNET" />
        //    <uses-permission android:name="android.permission.READ_LOGS" />
        //    <uses-permission android:name="android.permission.CAMERA" />
        //
        //    <uses-permission android:name="android.permission.CALL_PHONE" />
        //    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
        //
        //    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
        //    <uses-permission android:name="android.permission.INTERNET" /> <!-- 允许程序设置内置sd卡的写权限 -->
        //    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 允许程序获取网络状态 -->
        //    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- 允许程序访问WiFi网络信息 -->
        //    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- 允许程序读写手机状态和身份 -->
        //    <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <!-- 允许程序访问CellID或WiFi热点来获取粗略的位置 -->
        //    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
        //    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
//        XXPermissions.with(this) .permission(Permission.Group.STORAGE)
//            .permission(Permission.CALL_PHONE)
//            .permission(Permission.READ_CALL_LOG)
//            .permission(Permission.RECORD_AUDIO)
//            .permission(Permission.READ_PHONE_STATE)
//            .permission(Permission.CAMERA)
//            .permission(Permission.ACCESS_FINE_LOCATION)
//
//            .permission(Permission.READ_PHONE_STATE)
//            .permission(Permission.ACCESS_COARSE_LOCATION)
//
//            .request(object:OnPermissionCallback{
//            override fun onGranted(permissions: MutableList<String>?, all: Boolean) {
//
//            }
//
//        })


        val findViewById = findViewById<Button>(R.id.bnt)
        findViewById.setOnClickListener {
             val a=2/0
            Log.e("MainActivity","setOnClickListener");
            PageHelper.showSimpleNoTitlePage(SimplePage.DEMO)

         }


        Log.e("MainActivity","oncreate");









//        viewModel.getData()
//
//        lifecycleScope.launch {
//            // repeatOnLifecycle launches the block in a new coroutine every time the
//            // lifecycle is in the STARTED state (or above) and cancels it when it's STOPPED.
//            repeatOnLifecycle(Lifecycle.State.STARTED) {
//
//                // Trigger the flow and start listening for values.
//                // Note that this happens when lifecycle is STARTED and stops
//                // collecting when the lifecycle is STOPPED
//                viewModel.stateView.collect {
//                     when(it){
//                         is Resource.Success-> Log.e("Resource",it.data.toString())
//                             is Resource.Error->Log.e("Resource",it.error.toString())
//                         else ->Log.e("Resource","else")
//                     }
//                }
//                }
//            }
        //PageHelper.showSimpleNoTitlePage(SimplePage.DEMO)

      //  val property = PropertiesUtil.getProperty("STANDARD_WIDTH")
//        val property:String? = PropertiesUtil.getProperty("STANDARD_WIDTH");
//        property?.let { it.toFloat() }?:1080f
//
//        Log.e("float",property.toString());


//
//        MainScope().launch {
//
//            val a=flow<Int> {
//
//                emit(11)
//              //  throw  NullPointerException()
//
//            }.catch {
//                emit(12)
//            }.onCompletion {
//                Log.e("flow","结束了")
//            }
//
//                .collect {
//                Log.e("flow",it.toString())
//
//            }
//
//
//
//        }

//        val map = HashMap<String, Any>()
//        NetErrorHandler
//        map["Lang"] =1
//        map["LoginId"] = "a001"
//        map["password"] = "Abcd12345678"
//        MainScope().async {
//            2 / 0
//        }.runCatching {
//            ha
//        }
//            val deferredFail = async { }
//            deferredFail.await()
//        scopeNetLife {
//            async {
//                2 / 0
//            }
//          val a= flow<Nothing> {
//              val result = Net.post("api").apply {
//                  addUploadListener()
//                  execute()
//              }
//
//
//
//
//
//
//          }
//          }

//            async {
//                2 / 0
//            }
//            async {
//                2 / 0
//            }
//
//        }

//         scope {
//             async {
//                 2 / 0
//             }
//
//
//         }.catch {
//             handleError(it)
//         }
//
//        scope {
//            async {
//                2 / 0
//            }
//
//
//        }.catch {
//            handleError(it)
//        }






//
//        val catch = (1..3).asFlow().transform<Int, String> {
//
//                value ->
//
//            if (2 == value) {
//                throw NullPointerException()
//
//            } else {
//                emit("Response $value")
//
//            }
//        }.catch { e ->
//            log("Collected11 ${e}")
//            log("Collected11 ${e.message}")
//            log("Collected11 ${e.cause.toString()}")
//            emit(e.message.toString())
//        }



        //  simple().forEach { value -> println(value) }


//
//     fun test(){
//         MainScope().launch() {
//             catch.collect { value ->
//                 log("Collected $value")
//             }
//         }




    }

    override fun onResume() {
        super.onResume()
        Log.e("MainActivity","onResume")
    }

    override fun onStop() {
        super.onStop()
        Log.e("MainActivity","onStop")
    }

    fun aa():Flow<Int>{
        return (1..3).asFlow().transform<Int,Int> {
                value ->
            emit(value+1)

        }.flowOn(Dispatchers.IO)



    }





}
